
#pragma once
#include "stdafx.h"

class CLASS_DECLSPEC CWicBitmapSource
{
    //==============================================================================
    // CWicBitmapSource
    //==============================================================================
public:
    CWicBitmapSource(void);
    CWicBitmapSource(CWicBitmapSource const &);
    virtual ~CWicBitmapSource(void);
    CWicBitmapSource& operator=(CWicBitmapSource const &);

    //==============================================================================
    // IWICBitmapSource
    //==============================================================================
public:
    virtual HRESULT GetSize(
        /* [out] */ __RPC__out UINT *puiWidth,
        /* [out] */ __RPC__out UINT *puiHeight);

    virtual HRESULT GetPixelFormat(
        /* [out] */ __RPC__out WICPixelFormatGUID *pPixelFormat);

    virtual HRESULT GetResolution(
        /* [out] */ __RPC__out double *pDpiX,
        /* [out] */ __RPC__out double *pDpiY);

    virtual HRESULT CopyPalette(
        /* [in] */ IWICPalette *pIPalette);

    virtual HRESULT CopyPixels(
        /* [unique][in] */ const WICRect *prc,
        /* [in] */ UINT cbStride,
        /* [in] */ UINT cbBufferSize,
        /* [size_is][out] */ __RPC__out_ecount_full(cbBufferSize) BYTE *pbBuffer);

public:
    SIZE GetSize();
    IWICBitmapSource* GetPtr();

protected:
    void ClearPtr();

protected:
    IWICBitmap                  *m_pIWICBitmap;
    IWICBitmapSource            *m_pIWICBitmapSource;
    IWICBitmapFlipRotator       *m_pIWICBitmapFlipRotator;
    IWICBitmapFrameDecode       *m_pIWICFrameDecode;
    IWICFormatConverter         *m_pIWICFormatConverter;
};

